import 'package:flutter/material.dart';
import 'package:power_distribution_system/bean/userinfo_bean.dart';

import '../bean/requesterror_bean.dart';
import '../bean/selectarealist_bean.dart';
import '../model/base_model.dart';
import '../utils/tools/errorhandle_tool.dart';
import '../utils/tools/localstorage_tool.dart';
import '../utils/widget/toast_widget.dart';

class BaseVM {
  /// ### 登录处理器
  /// #### [context] 必填|上下文
  /// #### [par] 必填|Map|请求参数（用户名、密码）
  static loginDeed(BuildContext context, Map par) async {
    try {
      // 登录请求
      String token = await BaseModel.reqlogin(par);

      // 存储token
      LocalStorage.setStringItem("token", token);

      // 返回内容
      return token;
    } on RequestErrorBean catch (e) {
      // 请求失败、错误统一处理
      return errorHandle(context, e);
    }
  }

  /// ### 获取省市区
  /// #### [context] 必填|上下文
  static getAllArea(BuildContext context, {bool openLoad = true}) async {
    // 开启加载动画
    if (openLoad) ToastWidget.loading();

    try {
      // 获取所有的省市区
      var res = await BaseModel.reqQueryAllJson();

      // 关闭动画
      if (openLoad) ToastWidget.closeToast();

      // 存储省市区数据
//      LocalStorage.setFormat("allArea", res);

      // 返回数据
      return res;
    } on RequestErrorBean catch (e) {
      // 请求失败、错误统一处理
      return errorHandle(context, e);
    }
  }

  /// ### 获取台区列表
  /// #### [context] 必填|上下文
  /// #### [par] Map|必填|请求的参数
  static getEquipmentList(BuildContext context, Map par,
      {String title = "正在加载...", bool openLoad = true}) async {
    // 开启加载动画
    if (openLoad) ToastWidget.loading(title: title);

    try {
      SelectAreaListBean res = await BaseModel.reqAreaMetaList(par);

      // 关闭动画
      if (openLoad) ToastWidget.closeToast();

      return res;
    } on RequestErrorBean catch (e) {
      // 请求失败、错误统一处理
      return errorHandle(context, e);
    }
  }

  /// ### 并发处理
  /// #### [context] BuildContext|必填|上下文
  /// #### [par] Map|必填|获取台区列表的参数
  static concurrentHandle(BuildContext context, Map par) async {
    // 开启加载动画
    ToastWidget.loading();

    try {
      // 获取省市区数据
      List allArea = await getAllArea(context, openLoad: false);

      // 获取台区列表
      SelectAreaListBean areaList =
          await getEquipmentList(context, par, openLoad: false);

      // 关闭动画
      ToastWidget.closeToast();

      // 返回内容
      return {"allArea": allArea, "areaList": areaList};
    } on RequestErrorBean catch (e) {
      // 请求失败、错误统一处理
      return errorHandle(context, e);
    }
  }

  /// ### 退出
  /// #### [context] BuildContext|必填|上下文
  /// #### [title] String|必填|提示文案
  static exitSystem(BuildContext context, String title) async {
    // 开启加载动画
    ToastWidget.loading(title: title);

    try {
      // 执行退出操作
      var res = await BaseModel.reqLogout();

      // 关闭动画
      ToastWidget.closeToast();

      // 赋空id，重新登录后更新用户信息
      UserInfoBean.id = null;

      return res;
    } on RequestErrorBean catch (e) {
      // 请求失败、错误统一处理
      return errorHandle(context, e);
    }
  }
}
